#include "timer.h"
#include "trace.h"

/**
 *  метод возвращает монотонное время(не подверженное переводу системных часов) от начала эпохи.
 */
int clockgettime(struct timeval * tv)
{
	if (NULL == tv)
	{
		TRACE_ERR("<%s> incoming ptr is NULL\n", __FUNCTION__);
		return 1;
	}

	struct timespec ts;
	int rc = clock_gettime(CLOCK_MONOTONIC, &ts);

	if (rc == 0)
	{
		tv->tv_sec = ts.tv_sec;
		tv->tv_usec = ts.tv_nsec / 1000;

		if (ts.tv_nsec % 1000 >= 500)
		{
			if (++tv->tv_usec == 1000000)
			{
				tv->tv_usec = 0;
				++tv->tv_sec;
			}
		}
	}

	return rc;
}

int is_timer_expired(const struct timeval * const timer, const struct timeval * const now)
{
	if (NULL == timer || NULL == now)
	{
		TRACE_ERR("<%s> incoming ptr is NULL\n", __FUNCTION__);
		return 0;
	}
	if      (timer->tv_sec  > now->tv_sec)  return 0;
	else if (timer->tv_sec  < now->tv_sec)  return 1;
	else if (timer->tv_usec > now->tv_usec) return 0;
	else return 1;
}

